package server;

import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.jsoup.Jsoup;

public class StringHelper {
    public static String cutString(String description, int count) {
        String[] str = description.split(" ");
        int max = str.length;
        if (max >= count) {
            max = count;
        }
        description = "";
        
        for (int i = 0; i < max; i++) {
            description += str[i] + " ";
        }
        return description;
    }
    
    public static String getAlias(String str) {
        str = StringHelper.replaceVietnamese(str);
        str = StringHelper.replace(str);
        return str;
    }
    
    public static String replace(String str) {
        str = str.replaceAll("[\\W]+", "-");
        str = str.replaceAll("^-", "");
        str = str.replaceAll("-$", "");
        str = str.toLowerCase();
        return str;
    }

    public static String replaceVietnamese(String str) {
        String[] aArray = {"Ă¡ÂºÂ¥", "Ă¡ÂºÂ§", "Ă¡ÂºÂ©", "Ă¡ÂºÂ«", "Ă¡ÂºÂ­", "Ă¡ÂºÂ¤", "Ă¡ÂºÂ¦", "Ă¡ÂºÂ¨", "Ă¡ÂºÂª", "Ă¡ÂºÂ¬", "Ă¡ÂºÂ¯", "Ă¡ÂºÂ±", "Ă¡ÂºÂ³", "Ă¡ÂºÂµ", "Ă¡ÂºÂ·",
                "Ă¡ÂºÂ®", "Ă¡ÂºÂ°", "Ă¡ÂºÂ²", "Ă¡ÂºÂ´", "Ă¡ÂºÂ¶", "Ä‚Â¡", "Ä‚Â ", "Ă¡ÂºÂ£", "Ä‚Â£", "Ă¡ÂºÂ¡", "Ä‚Â¢", "Ă„Æ’",
                "Ä‚ï¿½", "Ä‚â‚¬", "Ă¡ÂºÂ¢", "Ä‚Æ’", "Ă¡ÂºÂ ", "Ä‚â€�", "Ă„â€�" };
        String[] eArray = { "Ă¡ÂºÂ¿", "Ă¡Â»ï¿½", "Ă¡Â»Æ’", "Ă¡Â»â€¦", "Ă¡Â»â€¡", "Ă¡ÂºÂ¾", "Ă¡Â»â‚¬", "Ă¡Â»â€�", "Ă¡Â»â€�", "Ă¡Â»â€ ",
                "Ä‚Â©", "Ä‚Â¨", "Ă¡ÂºÂ»", "Ă¡ÂºÂ½", "Ă¡ÂºÂ¹", "Ä‚Âª", "Ä‚â€°", "Ä‚Ë†", "Ă¡ÂºÂº", "Ă¡ÂºÂ¼", "Ă¡ÂºÂ¸", "Ä‚ï¿½" };
        String[] iArray = { "Ä‚Â­", "Ä‚Â¬", "Ă¡Â»â€°", "Ă„Â©", "Ă¡Â»â€¹", "Ä‚ï¿½", "Ä‚Å’", "Ă¡Â»Ë†", "Ă„Â¨", "Ă¡Â»ï¿½" };
        String[] oArray = { "Ă¡Â»â€˜", "Ă¡Â»â€œ", "Ă¡Â»â€¢", "Ă¡Â»â€”", "Ă¡Â»â„¢", "Ă¡Â»ï¿½", "Ă¡Â»â€™", "Ă¡Â»â€�", "Ä‚â€�", "Ă¡Â»Ëœ",
                "Ă¡Â»â€º", "Ă¡Â»ï¿½", "Ă¡Â»Å¸", "Ă¡Â»Â¡", "Ă¡Â»Â£", "Ă¡Â»ï¿½", "Ă¡Â»Å“", "Ă¡Â»ï¿½", "Ă¡Â»Â ", "Ă¡Â»Â¢", "Ä‚Â³", "Ä‚Â²",
                "Ă¡Â»ï¿½", "Ä‚Âµ", "Ă¡Â»ï¿½", "Ä‚Â´", "Ă†Â¡", "Ä‚â€œ", "Ä‚â€™", "Ă¡Â»ï¿½", "Ä‚â€¢", "Ă¡Â»Å’", "Ä‚â€�", "Ă†Â " };
        String[] uArray = { "Ă¡Â»Â©", "Ă¡Â»Â«", "Ă¡Â»Â­", "Ă¡Â»Â¯", "Ă¡Â»Â±", "Ă¡Â»Â¨", "Ă¡Â»Âª", "Ă¡Â»Â¬", "Ă¡Â»Â®", "Ă¡Â»Â°",
                "Ä‚Âº", "Ä‚Â¹", "Ă¡Â»Â§", "Ă…Â©", "Ă¡Â»Â¥", "Ă†Â°", "Ä‚ï¿½", "Ä‚â„¢", "Ă¡Â»Â¦", "Ă…Â¨", "Ă¡Â»Â¤", "Ă†Â¯" };
        String[] yArray = { "Ä‚Â½", "Ă¡Â»Â³", "Ă¡Â»Â·", "Ă¡Â»Â¹", "Ă¡Â»Âµ", "Ä‚ï¿½", "Ă¡Â»Â²", "Ă¡Â»Â¶", "Ă¡Â»Â¸", "Ă¡Â»Â´" };
        String[] dArray = { "Ă„â€˜", "Ă„ï¿½" };
        for (String item : aArray) {
            str = str.replaceAll(item, "a");
        }
        for (String item : eArray) {
            str = str.replaceAll(item, "e");
        }
        for (String item : iArray) {
            str = str.replaceAll(item, "i");
        }
        for (String item : oArray) {
            str = str.replaceAll(item, "o");
        }
        for (String item : uArray) {
            str = str.replaceAll(item, "u");
        }
        for (String item : yArray) {
            str = str.replaceAll(item, "y");
        }
        for (String item : dArray) {
            str = str.replaceAll(item, "d");
        }
        str = str.replaceAll("[\\W]+", " ");
        str = str.replaceAll("^-", "");
        str = str.replaceAll("-$", "");
        str = str.toLowerCase();
        return str;

    }

    public static String tag(String str) {
        str = str.replaceAll("\\#", "Sharp");
        str = str.replaceAll("\\+", "Plus");
        str = str.replaceAll("[^.\\w]+", "-");
        str = str.replaceAll("^-", "");
        str = str.replaceAll("-$", "");
        str = str.toLowerCase();
        return str;
    }

    public static String remove(String str) {
        str = str.replaceAll("[\'\"]+", "&quot;");
        return str;
    }

    public static boolean StringIsNullOrEmpty(String string) {
        if (string == null || string.equals("")) {
            return true;
        }
        return false;
    }
    
    public static ArrayList<String> findString(String regex, String input) {
        ArrayList<String> result = new ArrayList<String>();
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input); // get a matcher object
         while(m.find()) {
           result.add(input.substring(m.start(), m.end()));
        }
        return result;
    }
    
    public static String html2text(String html) {
        return Jsoup.parse(html).text();
    }
    
    public static String text2UTF8(String str) {
        byte[] utf8bytes = str.getBytes();
        return new String(utf8bytes,Charset.forName("UTF-8"));
    }
    
    public static String arrayToString(String[] a, String separator) {
        if (a == null || separator == null) {
            return null;
        }
        StringBuilder result = new StringBuilder();
        if (a.length > 0) {
            result.append(a[0]);
            for (int i=1; i < a.length; i++) {
                result.append(separator);
                result.append(a[i]);
            }
        }
        return result.toString();
   }
    
  public static String arrayListToString(ArrayList<String> a, String separator) {
      StringBuilder result = new StringBuilder();
      if (a.size() > 0) {
          result.append(a.get(0));
          for (int i = 1; i < a.size(); i++) {
              result.append(separator);
              result.append(a.get(i));
          }
      }
      return result.toString();
  }
  
  public static String listToString(List<String> str, String separator) {
      StringBuilder result = new StringBuilder();
      if (str.size() > 0) {
          result.append(str.get(0));
          for (int i = 1; i < str.size(); i++) {
              result.append(separator);
              result.append(str.get(i));
          }
      }
      return result.toString();
  }
  
  public static String md5(String str) {
	try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(str.getBytes());

        byte byteData[] = md.digest();

        //convert the byte to hex format method 1
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < byteData.length; i++) {
           sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
        }
        str = sb.toString();
    } catch (Exception e) {}
    return str;
  }
}
